
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Gen;

namespace Insifo.DL.GEN
{


    public class DLContacto : DLTransaction, IDLTransaccion<BEContacto>
    {


        #region Members


        /// <summary>
        /// Método Inserta un GEN_Contacto 
        /// </summary>
        /// <returns>Devuelve una entidad</returns>

        public BEContacto Insertar(BEContacto pbe)
        {
            BEContacto be = new BEContacto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Contacto_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                
                sqlDB.AddInParameter(dbCmd, "@ai_IdPersona", DbType.Int32, pbe.IdPersona);

                sqlDB.AddInParameter(dbCmd, "@ai_Secuencia", DbType.Int32, pbe.Secuencia);

                sqlDB.AddInParameter(dbCmd, "@as_TipoContacto", DbType.String, pbe.TipoContacto);

                sqlDB.AddInParameter(dbCmd, "@as_Nombre", DbType.String, pbe.Nombre);

                sqlDB.AddInParameter(dbCmd, "@as_Direccion", DbType.String, pbe.Direccion);

                sqlDB.AddInParameter(dbCmd, "@as_Telefono1", DbType.String, pbe.Telefono1);

                sqlDB.AddInParameter(dbCmd, "@as_Telefono2", DbType.String, pbe.Telefono2);

                sqlDB.AddInParameter(dbCmd, "@as_Telefono3", DbType.String, pbe.Telefono3);

                sqlDB.AddInParameter(dbCmd, "@as_Parentesco", DbType.String, pbe.Parentesco);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);

                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);
                                

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }
        /// <summary>
        /// Método Actualiza un GEN_Contacto 
        /// </summary>
        /// <returns>Devuelve una entidad</returns>

        public BEContacto Actualizar(BEContacto pbe)
        {
            BEContacto be = new BEContacto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Contacto_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;


                sqlDB.AddInParameter(dbCmd, "@ai_IdPersona", DbType.Int32, pbe.IdPersona);

                sqlDB.AddInParameter(dbCmd, "@ai_Secuencia", DbType.Int32, pbe.Secuencia);

                sqlDB.AddInParameter(dbCmd, "@as_TipoContacto", DbType.String, pbe.TipoContacto);

                sqlDB.AddInParameter(dbCmd, "@as_Nombre", DbType.String, pbe.Nombre);

                sqlDB.AddInParameter(dbCmd, "@as_Direccion", DbType.String, pbe.Direccion);

                sqlDB.AddInParameter(dbCmd, "@as_Telefono1", DbType.String, pbe.Telefono1);

                sqlDB.AddInParameter(dbCmd, "@as_Telefono2", DbType.String, pbe.Telefono2);

                sqlDB.AddInParameter(dbCmd, "@as_Telefono3", DbType.String, pbe.Telefono3);

                sqlDB.AddInParameter(dbCmd, "@as_Parentesco", DbType.String, pbe.Parentesco);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                               
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);
                
                
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        ///<summary>
        /// Método Actualiza el GEN_Contacto 
        ///</summary>
        ///<returns>Devuelve una entidad</returns> 

        public BEContacto Eliminar(BEContacto pbe)
        {
            BEContacto be = new BEContacto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Contacto_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;


                sqlDB.AddInParameter(dbCmd, "@ai_IdPersona", DbType.Int32, pbe.IdPersona);

                sqlDB.AddInParameter(dbCmd, "@ai_Secuencia", DbType.Int32, pbe.Secuencia);

                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        ///<summary>
        /// Método Lista datos de la tabla GEN_Contacto 
        ///</summary>
        ///<returns>Devuelve una Objeto Dataset</returns> 

        public List<BEContacto> Listar(BEContacto pbe)
        {
            //DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Contacto_Listar");
            List<BEContacto> oList = new List<BEContacto>();
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdPersona", DbType.String, pbe.IdPersona);

                sqlDB.AddInParameter(dbCmd, "@as_TipoContacto", DbType.String, pbe.TipoContacto);

                sqlDB.AddInParameter(dbCmd, "@as_Nombre", DbType.String, pbe.Nombre);

                sqlDB.AddInParameter(dbCmd, "@as_Direccion", DbType.String, pbe.Direccion);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);

                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);

                //ds = sqlDB.ExecuteDataSet(dbCmd);
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        BEContacto be = new BEContacto();
                        be.IdPersona = DBValue.Get<Int32>(reader, "IdPersona");
                        be.Secuencia = DBValue.Get<Int32>(reader, "Secuencia");
                        be.TipoContacto = DBValue.Get<String>(reader, "TipoContacto");
                        be.Nombre = DBValue.Get<String>(reader, "Nombre");
                        be.Direccion = DBValue.Get<String>(reader, "Direccion");
                        be.Telefono1 = DBValue.Get<String>(reader, "Telefono1");
                        be.Telefono2 = DBValue.Get<String>(reader, "Telefono2");
                        be.Telefono3 = DBValue.Get<String>(reader, "Telefono3");
                        be.Parentesco = DBValue.Get<String>(reader, "Parentesco");
                        be.Estado = DBValue.Get<String>(reader, "Estado");

                        be.IdTipoContacto = DBValue.Get<String>(reader, "IdTipoContacto");

                        oList.Add(be);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return oList;

        }

        ///<summary>
        /// Método obtiene dato de la tabla GEN_Contacto 
        ///</summary>
        ///<returns>Devuelve una Objeto  </returns> 

        public BEContacto Obtener(BEContacto pbe)
        {
            BEContacto be = new BEContacto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Contacto_Obtener");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                
                sqlDB.AddInParameter(dbCmd, "@ai_IdPersona", DbType.Int32, pbe.IdPersona);
                sqlDB.AddInParameter(dbCmd, "@ai_Secuencia", DbType.Int32, pbe.Secuencia);
                
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {

                        be.IdPersona = DBValue.Get<Int32>(reader, "IdPersona");
                        be.Secuencia = DBValue.Get<Int32>(reader, "Secuencia");
                        be.TipoContacto = DBValue.Get<String>(reader, "TipoContacto");
                        be.Nombre = DBValue.Get<String>(reader, "Nombre");
                        be.Direccion = DBValue.Get<String>(reader, "Direccion");
                        be.Telefono1 = DBValue.Get<String>(reader, "Telefono1");
                        be.Telefono2 = DBValue.Get<String>(reader, "Telefono2");
                        be.Telefono3 = DBValue.Get<String>(reader, "Telefono3");
                        be.Parentesco = DBValue.Get<String>(reader, "Parentesco");
                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");

                    }
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;

        }
        
        #endregion

    }
}